'use strict'

/**
 * 路由器
 */
//------------------------------------------------------------------
import { createStore } from 'vuex'
import utils from '../utils'
//------------------------------------------------------------------

/**
 * 路由器实例
 */
let $store = null


/**
 * 编辑路由器列表
 */
const $getState = (options = {}) => {
    // 模块化
    let modules = {}
    if (options.plugins) {
        for(let i = 0; i < options.plugins.length; i++) {
            let plugin = options.plugins[i]
            if (plugin.store) {
                modules[plugin.name] = Object.assign({ namespaced: true }, plugin.store)
            }
        }
    }
    return { modules }
}

export const store = {
    // true时，需要用 fast/userInfo 来进行调用
    namespaced: false,
    state: {
        // 系统配置
        sysConfig: utils.getStorage('sys_config'),
        // 登录用户信息
        userInfo: utils.getStorage('user_info'),
        // 首页下标
        tabIndex: sessionStorage.getItem('tabIndex') ?? 0
    },
    mutations: {
        setSysConfig(state, data) {
            state.sysConfig = data;
            utils.saveStorage('sys_config', data)
        },
        setUserInfo(state, data) {
            state.userInfo = data;
            utils.saveStorage('user_info', data)
        },
        setTabIndex(state, data) {
            state.tabIndex = data;
            sessionStorage.setItem('tabIndex', data)
        }
    },
    getters: {
        // 系统信息
        sysConfig: state => state.sysConfig,
        // 用户信息
        userInfo: state => state.userInfo,
        // 首页下标
        getTabIndex: state => {
            let tabBar = state.tabIndex
            let sessionInfo = sessionStorage.getItem('tabIndex')
            if (sessionInfo) {
                tabBar = Number(sessionInfo)
                state.tabIndex = Number(sessionInfo)
            }
            return tabBar
        }
    }
}

/**
 * 系统store
 */
export default class Store {

    /**
     * 构建store
     *
     * @param options 构建配置
     */
    constructor(options) {
        $store = createStore($getState(options))
    }
    /**
     * 获取store实例
     */
    instance() {
        return $store
    }
}
